import axios from "axios";
import { ElMessage } from "element-plus";

//创建axios实例
let request = axios.create({
    baseURL: import.meta.env.VITE_APP_BASE_API || '/',
    timeout: 2000
})

//请求拦截器
request.interceptors.request.use(config => {
    return config;
});

request.interceptors.response.use(
    (response) => {
        // 统一处理响应数据格式
        if (!response.data) {
            ElMessage({
                type: 'error',
                message: 'Invalid response data',
                duration: 3000
            });
            return Promise.reject(new Error('Invalid response data'));
        }

        // 检查业务逻辑错误（假设后端返回格式为 { code: number, msg: string, data: any }）
        if (response.data.status && response.data.status !== 200 && response.data.msg) {
            // 抛出业务错误消息
            ElMessage({
                type: 'error',
                message: response.data.msg,
                duration: 3000,
                showClose: true
            });
            return Promise.reject(new Error(response.data.msg));
        }

        return response.data; // 返回核心数据
    },
    (error) => {
        // 优先级：1. 业务错误消息 2. HTTP错误消息 3. 默认错误
        const msg = error.response?.data?.msg ||
            error.response?.data?.message ||
            error.message;

        // 显示错误提示（根据实际 UI 库调整）
        ElMessage({
            type: 'error',
            message: msg,
            duration: 3000,
            showClose: true
        });

        // 继续抛出错误以便外部 catch 处理
        return Promise.reject(error);
    }
);

const requestApi = async (url: string, method: string, data?: any) => {
    try {
        const response = await request.request({ url, method, data });
        return response.data;
    } catch (error) {
        // 拦截器已处理过错误，这里可以选择不再处理或补充逻辑
        console.error('请求出错：', error);
    }
};
export default requestApi;